#include<func.h>
//传递任意一个目录路径，能够显示出该目录ls -1的效果
int main(int argc,char* argv[])
{
    ARGS_CHECK(argc,2);
    DIR* dir;
    dir=opendir(argv[1]);
    if(NULL==dir)
    {
        perror("opendir");
        return -1;
    }
    struct dirent *p;
    struct stat buf;
    struct tm *l_time;
    int ret;
    while(p=readdir(dir))
    {
        switch(buf.st_mode & S_IFMT)//判断文件类型
        {
            case S_IFBLK: printf("b");break;//块设备类型
            case S_IFCHR: printf("C");break;//字符类型
            case S_IFDIR: printf("d");break;//目录类型
            case S_IFIFO: printf("p");break;//管道类型
            case S_IFLNK: printf("l");break;//链接类型
            case S_IFREG: printf("-");break;//文件类型
            case S_IFSOCK: printf("s");break;//套接字类型
            default: break;
        }
        for(int i=8;i>=0;i--)//判断文件权限
        {
            if(buf.st_mode & (1<<i))
            {
                switch(i%3)
                {
                    case 0: printf("x"); break;//文件该处具有执行权限
                    case 1: printf("w"); break;//文件该处具有写权限
                    case 2: printf("r"); break;//文件该处具有读权限
                }
            }
            else{
                printf("-");
            }
        }
        l_time=localtime(&buf.st_ctim);//文件最后修改时间
        ret=stat(p->d_name,&buf);
        printf("%2ld %s %s %5ld %d月 %2d %2d:%2d %s\n",\
        buf.st_nlink,getpwuid(buf.st_uid)->pw_name,getgrgid(buf.st_gid)->gr_name,buf.st_size,l_time->tm_mon+1,l_time->tm_mday,l_time->tm_hour,l_time->tm_min,p->d_name);
    }
    closedir(dir);
    return 0;
}